home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / i2o-dev.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  11KB  |  403 lines

  1. /*
  2.  * I2O user space accessible structures/APIs
  3.  *
  4.  * (c) Copyright 1999, 2000 Red Hat Software
  5.  *
  6.  * This program is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU General Public License
  8.  * as published by the Free Software Foundation; either version
  9.  * 2 of the License, or (at your option) any later version.
  10.  *
  11.  *************************************************************************
  12.  *
  13.  * This header file defines the I2O APIs that are available to both
  14.  * the kernel and user level applications.  Kernel specific structures
  15.  * are defined in i2o_osm. OSMs should include _only_ i2o_osm.h which
  16.  * automatically includs this file.
  17.  *
  18.  */
  19.  
  20. #ifndef _I2O_DEV_H
  21. #define _I2O_DEV_H
  22.  
  23. /* How many controllers are we allowing */
  24. #define MAX_I2O_CONTROLLERS    32
  25.  
  26. //#include <linux/ioctl.h>
  27.  
  28. /*
  29.  * I2O Control IOCTLs and structures
  30.  */
  31. #define I2O_MAGIC_NUMBER    'i'
  32. #define I2OGETIOPS        _IOR(I2O_MAGIC_NUMBER,0,u8[MAX_I2O_CONTROLLERS])
  33. #define I2OHRTGET        _IOWR(I2O_MAGIC_NUMBER,1,struct i2o_cmd_hrtlct)
  34. #define I2OLCTGET        _IOWR(I2O_MAGIC_NUMBER,2,struct i2o_cmd_hrtlct)
  35. #define I2OPARMSET        _IOWR(I2O_MAGIC_NUMBER,3,struct i2o_cmd_psetget)
  36. #define I2OPARMGET        _IOWR(I2O_MAGIC_NUMBER,4,struct i2o_cmd_psetget)
  37. #define I2OSWDL         _IOWR(I2O_MAGIC_NUMBER,5,struct i2o_sw_xfer)
  38. #define I2OSWUL         _IOWR(I2O_MAGIC_NUMBER,6,struct i2o_sw_xfer)
  39. #define I2OSWDEL        _IOWR(I2O_MAGIC_NUMBER,7,struct i2o_sw_xfer)
  40. #define I2OVALIDATE        _IOR(I2O_MAGIC_NUMBER,8,u32)
  41. #define I2OHTML         _IOWR(I2O_MAGIC_NUMBER,9,struct i2o_html)
  42. #define I2OEVTREG        _IOW(I2O_MAGIC_NUMBER,10,struct i2o_evt_id)
  43. #define I2OEVTGET        _IOR(I2O_MAGIC_NUMBER,11,struct i2o_evt_info)
  44. #define I2OPASSTHRU        _IOR(I2O_MAGIC_NUMBER,12,struct i2o_cmd_passthru)
  45. #define I2OPASSTHRU32        _IOR(I2O_MAGIC_NUMBER,12,struct i2o_cmd_passthru32)
  46.  
  47. struct i2o_cmd_passthru32 {
  48.     unsigned int iop;    /* IOP unit number */
  49.     u32 msg;        /* message */
  50. };
  51.  
  52. struct i2o_cmd_passthru {
  53.     unsigned int iop;    /* IOP unit number */
  54.     void __user *msg;    /* message */
  55. };
  56.  
  57. struct i2o_cmd_hrtlct {
  58.     unsigned int iop;    /* IOP unit number */
  59.     void __user *resbuf;    /* Buffer for result */
  60.     unsigned int __user *reslen;    /* Buffer length in bytes */
  61. };
  62.  
  63. struct i2o_cmd_psetget {
  64.     unsigned int iop;    /* IOP unit number */
  65.     unsigned int tid;    /* Target device TID */
  66.     void __user *opbuf;    /* Operation List buffer */
  67.     unsigned int oplen;    /* Operation List buffer length in bytes */
  68.     void __user *resbuf;    /* Result List buffer */
  69.     unsigned int __user *reslen;    /* Result List buffer length in bytes */
  70. };
  71.  
  72. struct i2o_sw_xfer {
  73.     unsigned int iop;    /* IOP unit number */
  74.     unsigned char flags;    /* Flags field */
  75.     unsigned char sw_type;    /* Software type */
  76.     unsigned int sw_id;    /* Software ID */
  77.     void __user *buf;    /* Pointer to software buffer */
  78.     unsigned int __user *swlen;    /* Length of software data */
  79.     unsigned int __user *maxfrag;    /* Maximum fragment count */
  80.     unsigned int __user *curfrag;    /* Current fragment count */
  81. };
  82.  
  83. struct i2o_html {
  84.     unsigned int iop;    /* IOP unit number */
  85.     unsigned int tid;    /* Target device ID */
  86.     unsigned int page;    /* HTML page */
  87.     void __user *resbuf;    /* Buffer for reply HTML page */
  88.     unsigned int __user *reslen;    /* Length in bytes of reply buffer */
  89.     void __user *qbuf;    /* Pointer to HTTP query string */
  90.     unsigned int qlen;    /* Length in bytes of query string buffer */
  91. };
  92.  
  93. #define I2O_EVT_Q_LEN 32
  94.  
  95. struct i2o_evt_id {
  96.     unsigned int iop;
  97.     unsigned int tid;
  98.     unsigned int evt_mask;
  99. };
  100.  
  101. /* Event data size = frame size - message header + evt indicator */
  102. #define I2O_EVT_DATA_SIZE 88
  103.  
  104. struct i2o_evt_info {
  105.     struct i2o_evt_id id;
  106.     unsigned char evt_data[I2O_EVT_DATA_SIZE];
  107.     unsigned int data_size;
  108. };
  109.  
  110. struct i2o_evt_get {
  111.     struct i2o_evt_info info;
  112.     int pending;
  113.     int lost;
  114. };
  115.  
  116. /**************************************************************************
  117.  * HRT related constants and structures
  118.  **************************************************************************/
  119. #define I2O_BUS_LOCAL    0
  120. #define I2O_BUS_ISA    1
  121. #define I2O_BUS_EISA    2
  122. #define I2O_BUS_MCA    3
  123. #define I2O_BUS_PCI    4
  124. #define I2O_BUS_PCMCIA    5
  125. #define I2O_BUS_NUBUS    6
  126. #define I2O_BUS_CARDBUS 7
  127. #define I2O_BUS_UNKNOWN 0x80
  128.  
  129. #ifndef __KERNEL__
  130.  
  131. typedef unsigned char u8;
  132. typedef unsigned short u16;
  133. typedef unsigned int u32;
  134.  
  135. #endif                /* __KERNEL__ */
  136.  
  137. typedef struct _i2o_pci_bus {
  138.     u8 PciFunctionNumber;
  139.     u8 PciDeviceNumber;
  140.     u8 PciBusNumber;
  141.     u8 reserved;
  142.     u16 PciVendorID;
  143.     u16 PciDeviceID;
  144. } i2o_pci_bus;
  145.  
  146. typedef struct _i2o_local_bus {
  147.     u16 LbBaseIOPort;
  148.     u16 reserved;
  149.     u32 LbBaseMemoryAddress;
  150. } i2o_local_bus;
  151.  
  152. typedef struct _i2o_isa_bus {
  153.     u16 IsaBaseIOPort;
  154.     u8 CSN;
  155.     u8 reserved;
  156.     u32 IsaBaseMemoryAddress;
  157. } i2o_isa_bus;
  158.  
  159. typedef struct _i2o_eisa_bus_info {
  160.     u16 EisaBaseIOPort;
  161.     u8 reserved;
  162.     u8 EisaSlotNumber;
  163.     u32 EisaBaseMemoryAddress;
  164. } i2o_eisa_bus;
  165.  
  166. typedef struct _i2o_mca_bus {
  167.     u16 McaBaseIOPort;
  168.     u8 reserved;
  169.     u8 McaSlotNumber;
  170.     u32 McaBaseMemoryAddress;
  171. } i2o_mca_bus;
  172.  
  173. typedef struct _i2o_other_bus {
  174.     u16 BaseIOPort;
  175.     u16 reserved;
  176.     u32 BaseMemoryAddress;
  177. } i2o_other_bus;
  178.  
  179. typedef struct _i2o_hrt_entry {
  180.     u32 adapter_id;
  181.     u32 parent_tid:12;
  182.     u32 state:4;
  183.     u32 bus_num:8;
  184.     u32 bus_type:8;
  185.     union {
  186.         i2o_pci_bus pci_bus;
  187.         i2o_local_bus local_bus;
  188.         i2o_isa_bus isa_bus;
  189.         i2o_eisa_bus eisa_bus;
  190.         i2o_mca_bus mca_bus;
  191.         i2o_other_bus other_bus;
  192.     } bus;
  193. } i2o_hrt_entry;
  194.  
  195. typedef struct _i2o_hrt {
  196.     u16 num_entries;
  197.     u8 entry_len;
  198.     u8 hrt_version;
  199.     u32 change_ind;
  200.     i2o_hrt_entry hrt_entry[1];
  201. } i2o_hrt;
  202.  
  203. typedef struct _i2o_lct_entry {
  204.     u32 entry_size:16;
  205.     u32 tid:12;
  206.     u32 reserved:4;
  207.     u32 change_ind;
  208.     u32 device_flags;
  209.     u32 class_id:12;
  210.     u32 version:4;
  211.     u32 vendor_id:16;
  212.     u32 sub_class;
  213.     u32 user_tid:12;
  214.     u32 parent_tid:12;
  215.     u32 bios_info:8;
  216.     u8 identity_tag[8];
  217.     u32 event_capabilities;
  218. } i2o_lct_entry;
  219.  
  220. typedef struct _i2o_lct {
  221.     u32 table_size:16;
  222.     u32 boot_tid:12;
  223.     u32 lct_ver:4;
  224.     u32 iop_flags;
  225.     u32 change_ind;
  226.     i2o_lct_entry lct_entry[1];
  227. } i2o_lct;
  228.  
  229. typedef struct _i2o_status_block {
  230.     u16 org_id;
  231.     u16 reserved;
  232.     u16 iop_id:12;
  233.     u16 reserved1:4;
  234.     u16 host_unit_id;
  235.     u16 segment_number:12;
  236.     u16 i2o_version:4;
  237.     u8 iop_state;
  238.     u8 msg_type;
  239.     u16 inbound_frame_size;
  240.     u8 init_code;
  241.     u8 reserved2;
  242.     u32 max_inbound_frames;
  243.     u32 cur_inbound_frames;
  244.     u32 max_outbound_frames;
  245.     char product_id[24];
  246.     u32 expected_lct_size;
  247.     u32 iop_capabilities;
  248.     u32 desired_mem_size;
  249.     u32 current_mem_size;
  250.     u32 current_mem_base;
  251.     u32 desired_io_size;
  252.     u32 current_io_size;
  253.     u32 current_io_base;
  254.     u32 reserved3:24;
  255.     u32 cmd_status:8;
  256. } i2o_status_block;
  257.  
  258. /* Event indicator mask flags */
  259. #define I2O_EVT_IND_STATE_CHANGE        0x80000000
  260. #define I2O_EVT_IND_GENERAL_WARNING        0x40000000
  261. #define I2O_EVT_IND_CONFIGURATION_FLAG        0x20000000
  262. #define I2O_EVT_IND_LOCK_RELEASE        0x10000000
  263. #define I2O_EVT_IND_CAPABILITY_CHANGE        0x08000000
  264. #define I2O_EVT_IND_DEVICE_RESET        0x04000000
  265. #define I2O_EVT_IND_EVT_MASK_MODIFIED        0x02000000
  266. #define I2O_EVT_IND_FIELD_MODIFIED        0x01000000
  267. #define I2O_EVT_IND_VENDOR_EVT            0x00800000
  268. #define I2O_EVT_IND_DEVICE_STATE        0x00400000
  269.  
  270. /* Executive event indicitors */
  271. #define I2O_EVT_IND_EXEC_RESOURCE_LIMITS    0x00000001
  272. #define I2O_EVT_IND_EXEC_CONNECTION_FAIL    0x00000002
  273. #define I2O_EVT_IND_EXEC_ADAPTER_FAULT        0x00000004
  274. #define I2O_EVT_IND_EXEC_POWER_FAIL        0x00000008
  275. #define I2O_EVT_IND_EXEC_RESET_PENDING        0x00000010
  276. #define I2O_EVT_IND_EXEC_RESET_IMMINENT     0x00000020
  277. #define I2O_EVT_IND_EXEC_HW_FAIL        0x00000040
  278. #define I2O_EVT_IND_EXEC_XCT_CHANGE        0x00000080
  279. #define I2O_EVT_IND_EXEC_NEW_LCT_ENTRY        0x00000100
  280. #define I2O_EVT_IND_EXEC_MODIFIED_LCT        0x00000200
  281. #define I2O_EVT_IND_EXEC_DDM_AVAILABILITY    0x00000400
  282.  
  283. /* Random Block Storage Event Indicators */
  284. #define I2O_EVT_IND_BSA_VOLUME_LOAD        0x00000001
  285. #define I2O_EVT_IND_BSA_VOLUME_UNLOAD        0x00000002
  286. #define I2O_EVT_IND_BSA_VOLUME_UNLOAD_REQ    0x00000004
  287. #define I2O_EVT_IND_BSA_CAPACITY_CHANGE     0x00000008
  288. #define I2O_EVT_IND_BSA_SCSI_SMART        0x00000010
  289.  
  290. /* Event data for generic events */
  291. #define I2O_EVT_STATE_CHANGE_NORMAL        0x00
  292. #define I2O_EVT_STATE_CHANGE_SUSPENDED        0x01
  293. #define I2O_EVT_STATE_CHANGE_RESTART        0x02
  294. #define I2O_EVT_STATE_CHANGE_NA_RECOVER     0x03
  295. #define I2O_EVT_STATE_CHANGE_NA_NO_RECOVER    0x04
  296. #define I2O_EVT_STATE_CHANGE_QUIESCE_REQUEST    0x05
  297. #define I2O_EVT_STATE_CHANGE_FAILED        0x10
  298. #define I2O_EVT_STATE_CHANGE_FAULTED        0x11
  299.  
  300. #define I2O_EVT_GEN_WARNING_NORMAL        0x00
  301. #define I2O_EVT_GEN_WARNING_ERROR_THRESHOLD    0x01
  302. #define I2O_EVT_GEN_WARNING_MEDIA_FAULT     0x02
  303.  
  304. #define I2O_EVT_CAPABILITY_OTHER        0x01
  305. #define I2O_EVT_CAPABILITY_CHANGED        0x02
  306.  
  307. #define I2O_EVT_SENSOR_STATE_CHANGED        0x01
  308.  
  309. /*
  310.  *    I2O classes / subclasses
  311.  */
  312.  
  313. /*  Class ID and Code Assignments
  314.  *  (LCT.ClassID.Version field)
  315.  */
  316. #define I2O_CLASS_VERSION_10            0x00
  317. #define I2O_CLASS_VERSION_11            0x01
  318.  
  319. /*  Class code names
  320.  *  (from v1.5 Table 6-1 Class Code Assignments.)
  321.  */
  322.  
  323. #define I2O_CLASS_EXECUTIVE            0x000
  324. #define I2O_CLASS_DDM                0x001
  325. #define I2O_CLASS_RANDOM_BLOCK_STORAGE        0x010
  326. #define I2O_CLASS_SEQUENTIAL_STORAGE        0x011
  327. #define I2O_CLASS_LAN                0x020
  328. #define I2O_CLASS_WAN                0x030
  329. #define I2O_CLASS_FIBRE_CHANNEL_PORT        0x040
  330. #define I2O_CLASS_FIBRE_CHANNEL_PERIPHERAL    0x041
  331. #define I2O_CLASS_SCSI_PERIPHERAL        0x051
  332. #define I2O_CLASS_ATE_PORT            0x060
  333. #define I2O_CLASS_ATE_PERIPHERAL        0x061
  334. #define I2O_CLASS_FLOPPY_CONTROLLER        0x070
  335. #define I2O_CLASS_FLOPPY_DEVICE         0x071
  336. #define I2O_CLASS_BUS_ADAPTER_PORT        0x080
  337. #define I2O_CLASS_PEER_TRANSPORT_AGENT        0x090
  338. #define I2O_CLASS_PEER_TRANSPORT        0x091
  339. #define    I2O_CLASS_END                0xfff
  340.  
  341. /*
  342.  *  Rest of 0x092 - 0x09f reserved for peer-to-peer classes
  343.  */
  344.  
  345. #define I2O_CLASS_MATCH_ANYCLASS        0xffffffff
  346.  
  347. /*
  348.  *  Subclasses
  349.  */
  350.  
  351. #define I2O_SUBCLASS_i960            0x001
  352. #define I2O_SUBCLASS_HDM            0x020
  353. #define I2O_SUBCLASS_ISM            0x021
  354.  
  355. /* Operation functions */
  356.  
  357. #define I2O_PARAMS_FIELD_GET            0x0001
  358. #define I2O_PARAMS_LIST_GET            0x0002
  359. #define I2O_PARAMS_MORE_GET            0x0003
  360. #define I2O_PARAMS_SIZE_GET            0x0004
  361. #define I2O_PARAMS_TABLE_GET            0x0005
  362. #define I2O_PARAMS_FIELD_SET            0x0006
  363. #define I2O_PARAMS_LIST_SET            0x0007
  364. #define I2O_PARAMS_ROW_ADD            0x0008
  365. #define I2O_PARAMS_ROW_DELETE            0x0009
  366. #define I2O_PARAMS_TABLE_CLEAR            0x000A
  367.  
  368. /*
  369.  * I2O serial number conventions / formats
  370.  * (circa v1.5)
  371.  */
  372.  
  373. #define I2O_SNFORMAT_UNKNOWN            0
  374. #define I2O_SNFORMAT_BINARY            1
  375. #define I2O_SNFORMAT_ASCII            2
  376. #define I2O_SNFORMAT_UNICODE            3
  377. #define I2O_SNFORMAT_LAN48_MAC            4
  378. #define I2O_SNFORMAT_WAN            5
  379.  
  380. /*
  381.  * Plus new in v2.0 (Yellowstone pdf doc)
  382.  */
  383.  
  384. #define I2O_SNFORMAT_LAN64_MAC            6
  385. #define I2O_SNFORMAT_DDM            7
  386. #define I2O_SNFORMAT_IEEE_REG64         8
  387. #define I2O_SNFORMAT_IEEE_REG128        9
  388. #define I2O_SNFORMAT_UNKNOWN2            0xff
  389.  
  390. /*
  391.  *    I2O Get Status State values
  392.  */
  393.  
  394. #define ADAPTER_STATE_INITIALIZING        0x01
  395. #define ADAPTER_STATE_RESET            0x02
  396. #define ADAPTER_STATE_HOLD            0x04
  397. #define ADAPTER_STATE_READY            0x05
  398. #define ADAPTER_STATE_OPERATIONAL        0x08
  399. #define ADAPTER_STATE_FAILED            0x10
  400. #define ADAPTER_STATE_FAULTED            0x11
  401.  
  402. #endif                /* _I2O_DEV_H */
  403.